package com.nas.crocus.domain;

import java.util.Collection;
import java.util.Date;

import javax.persistence.Basic;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.Table;

import org.codehaus.jackson.map.annotate.JsonDeserialize;
import org.hibernate.annotations.Cascade;

import com.nas.crocus.ext.DateJacksonDeserializer;

@Entity
@Table(name = "Ruta")
public class Ruta {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "rutaId")
    private Long id;
   
    @OneToOne(optional=false)
    @JoinColumn(
            name="eventoId", unique=true, nullable=false, updatable=false)
    private Evento evento;
    
    
    @Column(name = "rutaCantAereo")
    private Integer cantidadAereo;
    
    @Column(name = "rutaVencimiento1")
    private Date vencimiento1;
    
    @Column(name = "rutaVencimiento2")
    private Date vencimiento2; 
    
    @Column(name = "rutaVencimiento3")
    private Date vencimiento3;
    
    @OneToMany(cascade=CascadeType.ALL, mappedBy="ruta")
    @Cascade(org.hibernate.annotations.CascadeType.DELETE_ORPHAN)
    private Collection<Vuelo> vuelos;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public Evento getEvento() {
        return evento;
    }

    public void setEvento(Evento evento) {
        this.evento = evento;
    }

    public Integer getCantidadAereo() {
        return cantidadAereo;
    }

    public void setCantidadAereo(Integer cantidadAereo) {
        this.cantidadAereo = cantidadAereo;
    }

    public Date getVencimiento1() {
        return vencimiento1;
    }

    @JsonDeserialize(using=DateJacksonDeserializer.class)
    public void setVencimiento1(Date vencimiento1) {
        this.vencimiento1 = vencimiento1;
    }

    public Date getVencimiento2() {
        return vencimiento2;
    }

    @JsonDeserialize(using=DateJacksonDeserializer.class)
    public void setVencimiento2(Date vencimiento2) {
        this.vencimiento2 = vencimiento2;
    }

    public Date getVencimiento3() {
        return vencimiento3;
    }

    @JsonDeserialize(using=DateJacksonDeserializer.class)
    public void setVencimiento3(Date vencimiento3) {
        this.vencimiento3 = vencimiento3;
    }

    public Collection<Vuelo> getVuelos() {
        return vuelos;
    }

    public void setVuelos(Collection<Vuelo> vuelos) {
        
        for (Vuelo vuelo : vuelos) {
            vuelo.setRuta(this);
        }
        this.vuelos = vuelos;
    }
    
    
}
